From 52709dff9a624eb470d60db5bffa85794268ed0f Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Mon, 28 May 2007 20:24:59 +0000 Subject: [PATCH] Don't traverse beyond the toplevel of the passed in window. 2007-05-28 Richard Hult * gdk/quartz/gdkevents-quartz.c (find_window_interested_in_event_mask): Don't traverse beyond the toplevel of the passed in window. svn path=/trunk/; revision=17967 --- ChangeLog | 6 ++++++ gdk/quartz/gdkevents-quartz.c | 30 ++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 609907320c..4562e51a4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-05-28 Richard Hult + + * gdk/quartz/gdkevents-quartz.c + (find_window_interested_in_event_mask): Don't traverse beyond the + toplevel of the passed in window. + 2007-05-28 Richard Hult * gdk/quartz/gdkwindow-quartz.c: (_gdk_windowing_window_init): Set diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index 45455cca7e..012adcced8 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -300,26 +300,32 @@ apply_filters (GdkWindow *window, return result; } -/* This function checks if the passed in window is interested in the - * event mask. If so, it's returned. If not, the event can be propagated - * to its parent. +/* Checks if the passed in window is interested in the event mask, and + * if so, it's returned. If not, the event can be propagated through + * its ancestors until one with the right event mask is found, up to + * the nearest toplevel. */ static GdkWindow * -find_window_interested_in_event_mask (GdkWindow *window, - GdkEventMask event_mask, - gboolean propagate) +find_window_interested_in_event_mask (GdkWindow *window, + GdkEventMask event_mask, + gboolean propagate) { - while (window) - { - GdkWindowObject *private = GDK_WINDOW_OBJECT (window); + GdkWindowObject *private; + private = GDK_WINDOW_OBJECT (window); + while (private) + { if (private->event_mask & event_mask) - return window; + return (GdkWindow *)private; if (!propagate) return NULL; - else - window = GDK_WINDOW (private->parent); + + /* Don't traverse beyond toplevels. */ + if (GDK_WINDOW_TYPE (private) != GDK_WINDOW_CHILD) + break; + + private = private->parent; } return NULL; -- 2.30.2